/**************************************************************
 * bsp_ld06.h
 * 
 *  Created on: May 23, 2023
 *      Author: ardakk
 *************************************************************/

#ifndef _LIDAR_LD06_H
#define _LIDAR_LD06_H

#include <stdint.h>
#include <stdbool.h>

#define POINT_PER_PACK 12    //多了数据不对
#define PACKAGE_SIZE 47
#define HEADER 0x54

// 单个测量点结构（严格按手册定义）
typedef struct __attribute__((packed)) {
    float angle;
    uint16_t distance;    // 距离值，单位：mm
    uint8_t confidence;    // 强度值改成了 confidence 置信度>180为有效
} LidarPointStructDef;

// 雷达数据帧结构（严格按手册定义）
typedef struct __attribute__((packed)) {
    uint8_t *data;                  //原始数据指针
    uint8_t header;                 // 起始符 0x54
    uint8_t ver_len;                // 帧信息，低5位为点数
    uint16_t speed;                 // 雷达转速，单位：度/秒
    uint16_t start_angle;           // 起始角度，单位：0~180度
    LidarPointStructDef point[POINT_PER_PACK];  // 12个测量点
    uint16_t end_angle;             // 结束角度，单位：0~180度
    uint16_t timestamp;             // 时间戳，单位：ms
    uint8_t crc8;                   // CRC8 校验
    uint16_t last_angle;            //用于判断转一圈
    uint8_t valid_points;            //本次有效点数量
    uint32_t distance;              // 有效点平均距离加权
    uint16_t round_min_distance;    //圈最小值
    uint16_t last_round_min_distance;   //最终一圈结束最小值！！！
    uint16_t count;                 //扫描次数
    uint16_t round;                 //圈数
    uint32_t ticktime;              //当前时间戳
} LiDARFrameTypeDef;

// 函数声明

bool ParseLidarFrame(LiDARFrameTypeDef *frame, uint8_t package[]);

#endif /* BSP_LD06_H */